home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 015a / bbb_v21.zip / BBB.BAS next >
BASIC Source File  |  1991-11-25  |  10KB  |  350 lines

  1. ' BBB v 2.1 - Brent's Batch Beautifier
  2. '
  3. ' (c) 1991 by Brent Ashley
  4. '
  5. ' last revision 25 November 1991 
  6. '
  7. ' remember to link with _STR$.OBJ under PDQ v3.0
  8. '
  9. ' $include: 'pdqdecl.bas'
  10. '
  11. DEFINT A-Z
  12. DIM Parm$(2), Box$(3), Regs as RegType
  13.  
  14. DEF FNBorder$(Num)
  15.   ' extract box border character from definition string
  16.   FNBorder$ = CHR$(PDQValI(Mid$(Box$(BoxType), Num * 4 - 3, 4)))
  17. END DEF
  18.  
  19. ' box border definition strings
  20. Box$(1) = "218 191 192 217 196 179"
  21. Box$(2) = "201 187 200 188 205 186"
  22. Box$(3) = "178 178 178 178 178 178"
  23.  
  24. ' define ANSI escape prefix
  25. Prefix$ = CHR$(27)+"["
  26.  
  27. CmdLine$ = COMMAND$
  28.  
  29. ' work on parent environment
  30. EnvOption 1
  31.  
  32. SetDelimitChar 32 ' space
  33. Action$ = PDQParse(CmdLine$) 'get first action
  34.  
  35. IF Action$ = "" OR Action$ = "/?" THEN 
  36.   PRINT
  37.   PRINT "BBB - Brent's Batch Beautifier v2.0 by Brent Ashley"
  38.   PRINT "Syntax:  BBB Action [Parm1 [Parm2...]] [Action...]
  39.   PRINT "- Action can be long or short form as below:"
  40.   PRINT "  ANSITEST  BOLD/!  UNDERLINE/_  BLINK/;  REVERSE/*  RESET/^"
  41.   PRINT "  CLEAR/#  CLREOL/)  SAVE/{  RESTORE/}  LOCATE/@ Row Col"
  42.   PRINT "  MODE/M {M40|M80|C40|C80}"
  43.   PRINT "  COLOR Fore Back"
  44.   PRINT "    (BLACK/0 RED/1 GREEN/2 YELLOW/3 BLUE/4 MAGENTA/5 CYAN/6 WHITE/7)"
  45.   PRINT "  BOX/B Tp Lt Bt Rt {FILL/F|EMPTY/E} {SINGLE/S|DOUBLE/D|BLOCK/B|CHAR/C nnn}"
  46.   PRINT "  SAY/? All text up to tilde~"
  47.   PRINT "  STRING/$ String up to tilde~ Repeats"
  48.   PRINT "  ENTER/E  FLUSH/F  BEEP/+  TIME/T  DATE/D  GAUGE/G Percent"
  49.   PRINT "  WEEKDAY/W (returns ERRORLEVEL 0:Sunday to 6:Saturday)"
  50.   PRINT "  ALARM/A Repeats (Repeats=0 to wait for keypress)"
  51.   PRINT "  PAUSE/P Seconds (Seconds=0 to wait for keypress)"
  52.   PRINT "  INPUT/I EnvironmentVariableName  UPCASE/U EnvironmentVariableName"
  53.   PRINT "  QUERY/Q ValidString (ERRORLEVEL=stringposition)"
  54.   PRINT "  STUFF text up to tilde~ (&=return)
  55.   PRINT "  PRTSCR ON|OFF  BOOT [COLD]"
  56.   END
  57. END IF
  58.  
  59. DO ' main program loop 
  60.   ' init ANSI code to send
  61.   Code$ = "" 
  62.   SELECT CASE UCASE$(Action$)
  63.  
  64.     CASE "ANSITEST"
  65.       ' Check for ANSI.SYS using same method as COMMAND.COM
  66.       DEF SEG = 0
  67.       Int29Seg& = PEEK(166) + 256 * PEEK(167)
  68.       IF Int29Seg& < 0 THEN Int29Seg& = Int29Seg& + 65536
  69.       Int20Seg& = PEEK(130) + 256 * PEEK(131)
  70.       IF Int20Seg& < 0 THEN Int20Seg& = Int20Seg& + 65536
  71.       IF Int29Seg& <= Int20Seg& THEN
  72.         PRINT "BBB - ANSI.SYS not installed!"
  73.         ErrorLevel = 1
  74.       ELSE
  75.         PRINT "BBB - ANSI.SYS is loaded."
  76.         ErrorLevel = 0
  77.       END IF
  78.       EndLevel ErrorLevel
  79.  
  80.     CASE "BOOT"
  81.       DEF SEG = 0
  82.       IF UCASE$(PDQParse(CmdLine$)) = "COLD" THEN
  83.         PDQPoke2 &H472, 0
  84.       ELSE
  85.         PDQPoke2 &H472, &H1234
  86.       ENDIF
  87.       DEF SEG = &HFFFF
  88.       CALL ABSOLUTE(0)
  89.  
  90.     CASE "BOLD", "!"
  91.       Code$ = "1m"
  92.  
  93.     CASE "UNDERLINE", "_"
  94.       Code$ = "4m"
  95.   
  96.     CASE "BLINK", ";"
  97.       Code$ = "5m"
  98.   
  99.     CASE "REVERSE", "*"
  100.       Code$ = "7m"
  101.  
  102.     CASE "RESET", "^"
  103.       Code$ = "0m"
  104.   
  105.     CASE "COLOR", "C"
  106.       Parm$(1) = PDQParse(CmdLine$) ' fore
  107.       Parm$(2) = PDQParse(CmdLine$) ' back
  108.       FOR i = 1 TO 2
  109.         ' translate color
  110.         SELECT CASE UCASE$(Parm$(i))
  111.           CASE "RED", "1"
  112.             ColorVal = 1
  113.           CASE "GREEN", "2"
  114.             ColorVal = 2
  115.           CASE "YELLOW", "3"
  116.             ColorVal = 3
  117.           CASE "BLUE", "4"
  118.             ColorVal = 4
  119.           CASE "MAGENTA", "5"
  120.             ColorVal = 5
  121.           CASE "CYAN", "6"
  122.             ColorVal = 6
  123.           CASE "WHITE", "7"
  124.             ColorVal = 7
  125.           CASE ELSE
  126.             ColorVal = 0
  127.         END SELECT
  128.         IF i = 1 THEN
  129.           Parm$(i) = STR$(30 + ColorVal) ' fore
  130.         ELSE
  131.           Parm$(i) = STR$(40 + ColorVal) ' back
  132.         ENDIF
  133.       NEXT
  134.       Code$ = Parm$(1) + ";" + Parm$(2) + "m"
  135.   
  136.     CASE "LOCATE", "@"
  137.       Parm$(1) = PDQParse(CmdLine$) ' row
  138.       Parm$(2) = PDQParse(CmdLine$) ' column
  139.       Code$ = Parm$(1) + ";" + Parm$(2) +"H"
  140.  
  141.     CASE "CLREOL", ")"
  142.       Code$ = "K"
  143.   
  144.     CASE "SAVE", "{"
  145.       Code$ = "s"
  146.   
  147.     CASE "RESTORE", "}"
  148.       Code$ = "u"
  149.   
  150.     CASE "CLEAR", "#"
  151.       Code$ = "2J"
  152.  
  153.     CASE "MODE", "M"
  154.       Parm$(1) = PDQParse(CmdLine$)
  155.       SELECT CASE UCASE$(Parm$(1))
  156.         CASE "M40"
  157.           Mode$ = "0h"
  158.         CASE "M80"
  159.           Mode$ = "2h"
  160.         CASE "C40"
  161.           Mode$ = "1h"
  162.         CASE ELSE
  163.           Mode$ = "3h"
  164.       END SELECT
  165.       Code$ = "=" + Mode$ 
  166.  
  167.     CASE "BOX", "B"
  168.       Top = PDQValI(PDQParse(CmdLine$))
  169.       Lft = PDQValI(PDQParse(CmdLine$))
  170.       Bot = PDQValI(PDQParse(CmdLine$))
  171.       Rgt = PDQValI(PDQParse(CmdLine$))
  172.       Fill$ = UCASE$(PDQParse(CmdLine$))
  173.       Style$ = (PDQParse(CmdLine$))
  174.       SELECT CASE UCASE$(Style$)
  175.         CASE "DOUBLE", "D"
  176.           BoxType = 2
  177.         CASE "BLOCK", "B"
  178.           BoxType = 3
  179.         CASE "CHAR", "C"
  180.           BoxChar$ = PDQParse(CmdLine$)
  181.           BoxType = 4
  182.           Box$(4) = ""
  183.           FOR i = 1 TO 6
  184.             Box$(4) = Box$(4) + BoxChar$ + " "
  185.           NEXT
  186.         CASE ELSE 
  187.           ' default to single
  188.           BoxType = 1
  189.       END SELECT
  190.       Wide = Rgt - Lft - 1
  191.       IF (Wide > 0) AND (Top < Bot) THEN
  192.         PRINT Prefix$; "s"; ' save cursor position
  193.         ' top line
  194.         Row = Top: Col = Lft: GOSUB CursorLoc 
  195.         PRINT FNBorder$(1); STRING$(Wide,FNBorder$(5)); FNBorder$(2);
  196.         ' middle lines 
  197.         FOR i = Top + 1 To Bot - 1
  198.           Row = i: Col = Lft: GOSUB CursorLoc 
  199.           PRINT FNBorder$(6);      
  200.           IF Fill$ = "F" or Fill$ = "FILL" THEN PRINT SPACE$(Wide);
  201.           Row = i: Col = Rgt: Gosub CursorLoc
  202.           PRINT FNBorder$(6);
  203.         NEXT
  204.         ' bottom line
  205.         Row = Bot: Col = Lft: GOSUB CursorLoc 
  206.         PRINT FNBorder$(3); STRING$(Wide,FNBorder$(5)); FNBorder$(4);
  207.         ' restore cursor position
  208.         PRINT Prefix$; "u";
  209.       END IF
  210.          
  211.     CASE "SAY", "?"
  212.       SetDelimitChar 126 ' tilde (~)
  213.       PRINT PDQParse(CmdLine$);
  214.       SetDelimitChar 32 ' space
  215.  
  216.     CASE "STRING", "$"
  217.       SetDelimitChar 126 ' tilde (~)
  218.       Parm$(1) = PDQParse(CmdLine$)
  219.       SetDelimitChar 32  ' space
  220.       Repeat = PDQValI(PDQParse(CmdLine$))
  221.       ' build repeated string
  222.       Result$ = ""
  223.       FOR i = 1 TO Repeat
  224.         Result$ = Result$ + Parm$(1)
  225.       NEXT
  226.       PRINT Result$;
  227.  
  228.     CASE "PAUSE", "P"
  229.       ' multiply time by 18.2 for ticks to seconds conversion
  230.       PauseTime = (PDQValI(PDQParse(CmdLine$)) * 182) \ 10
  231.       IF PauseTime = 0 THEN ' wait for key
  232.         DO: LOOP WHILE INKEY$ = ""   
  233.       ELSE
  234.         Pause PauseTime 
  235.       ENDIF
  236.  
  237.     CASE "ENTER", "E"
  238.       PRINT
  239.  
  240.     CASE "FLUSH", "F"
  241.       WHILE INKEY$ <> "": WEND
  242.  
  243.     CASE "BEEP", "+"
  244.       BEEP
  245.       Pause 2
  246.  
  247.     CASE "ALARM", "A"
  248.       Repeats = PDQValI(PDQParse(CmdLine$))
  249.       i = 0
  250.       DO 
  251.         IF Repeats = 0 THEN
  252.           IF INKEY$<>"" THEN EXIT DO
  253.         ELSE 
  254.           i = i + 1
  255.           IF i > Repeats THEN EXIT DO
  256.         ENDIF
  257.         PDQSound 523, 3
  258.         PDQSound 659, 3
  259.         PDQSound 784, 3
  260.       LOOP
  261.  
  262.     CASE "DATE", "D"
  263.       PRINT DATE$;
  264.  
  265.     CASE "TIME", "T"
  266.       PRINT TIME$;
  267.    
  268.     CASE "WEEKDAY", "W"
  269.       Regs.AX = &H2A00
  270.       INTERRUPT &H21, Regs
  271.       WeekDay = Regs.AX MOD 256
  272.       EndLevel WeekDay
  273.  
  274.     CASE "GAUGE", "G"
  275.       Gauge = PDQValI(PDQParse(CmdLine$))\2 MOD 100
  276.       ' print gas gauge
  277.       PRINT STRING$(Gauge,219); STRING$(50 - Gauge,177);
  278.  
  279.     CASE "INPUT", "I"
  280.       VarName$ = PDQParse(CmdLine$)
  281.       PDQInput VarValue$
  282.       EnvCall$ = VarName$ + "=" + VarValue$
  283.       ENVIRON EnvCall$
  284.       IF ERR = 105 THEN
  285.         PRINT Prefix$; "s";
  286.         Row = 25: Col = 1: GOSUB CursorLoc  
  287.         PRINT "BBB - not enough DOS environment space"
  288.         PRINT Prefix$; "u";
  289.       END IF       
  290.  
  291.     CASE "QUERY","Q"
  292.       Parm$(1) = UCASE$(PDQParse(CmdLine$)) ' valid string
  293.       DO
  294.         ' wait for keypress
  295.         KeyPress$=""
  296.         DO
  297.           KeyPress$ = UCASE$(INKEY$)
  298.         LOOP WHILE KeyPress$=""
  299.         Posn = INSTR(Parm$(1), KeyPress$) 
  300.         If Posn <> 0 THEN ' within valid string?
  301.           EndLevel Posn ' key valid
  302.         ELSE
  303.           BEEP ' key invalid
  304.         END IF
  305.       LOOP
  306.  
  307.     CASE "UPCASE", "U"
  308.       Parm$(1) = UCASE$(PDQParse(CmdLine$)) ' var name
  309.       EnvCall$ = Parm$(1) + "=" + UCASE$(ENVIRON$(Parm$(1)))
  310.       ENVIRON EnvCall$ 
  311.  
  312.     CASE "STUFF"
  313.       SetDelimitChar 126
  314.       Parm$(1) = PDQParse(CmdLine$)
  315.       SetDelimitChar 32
  316.       FOR i = 1 to LEN(Parm$(1))
  317.         IF MID$(Parm$(1),i,1) = "&" THEN MID$(Parm$(1),i,1) = CHR$(13) 
  318.       NEXT
  319.       StuffBuf Parm$(1)   
  320.  
  321.     CASE "PRTSCR"
  322.       IF UCASE$(PDQParse(CmdLine$))="OFF" THEN PokeVal=1 ELSE PokeVal=0
  323.       DEF SEG = 0
  324.       POKE &H500, PokeVal
  325.  
  326.     CASE "" ' no more actions on command line
  327.       END
  328.    
  329.     CASE ELSE
  330.       ' invalid command - print message at 25,1
  331.       PRINT Prefix$; "s";
  332.       Row = 25: Col = 1: GOSUB CursorLoc  
  333.       PRINT "Invalid BBB command: "; Action$;
  334.       PRINT Prefix$; "u";
  335.  
  336.   END SELECT
  337.   ' see if ANSI code to be printed
  338.   IF Code$ <> "" THEN PRINT Prefix$; Code$;
  339.  
  340.   ' get next action
  341.   Action$ = PDQParse(CmdLine$)
  342. LOOP
  343.  
  344. CursorLoc: 
  345.   ' reposition cursor via ANSI codes
  346.   RowStr$ = STR$(Row)
  347.   ColStr$ = STR$(Col)
  348.   PRINT Prefix$; RowStr$; ";"; ColStr$; "H";
  349.   RETURN
  350.